package org.gary.admin.service.impl;

import static lengreen.util.StringUtils.isNull;

import javax.annotation.Resource;

import org.gary.admin.dao.AdministratorDao;
import org.gary.admin.model.Administrator;
import org.gary.admin.service.AdministratorService;
import org.gary.core.factories.impl.BasicServiceFactoryImpl;
import org.gary.core.util.ResultMessage;
import org.springframework.stereotype.Component;

/**
 * administrator service实现
 * @author Administrator
 * 
 */
@Component("administratorService")
public class AdministratorServiceImpl extends
		BasicServiceFactoryImpl<Administrator> implements AdministratorService {
	private AdministratorDao administratorDao;
	
	/**
	 * 重写basicServicefactoryimpl中的Save方法， 重写以加入日志模块，并记录日志
	 */
	@Override
	public String save(Administrator entity) {
		if (isNull(entity.getUsername())) {
			return ResultMessage.admin.ADD_NONE;
		} else {
			// 在管理员保存之前记录一条日志
			getLoggerService().makeLog(entity.getClass().getName(),
					"开始保存一个管理员，" + entity);
			super.save(entity);
			// 在管理员保存之后记录一条日志
			getLoggerService().makeLog(entity.getClass().getName(),
					"保存一个管理员成功，" + entity);
			return ResultMessage.admin.ADD_SUCCESS;
		}
	}

	@Override
	public boolean checkUsernameExist(String username) {
		if(administratorDao.checkUsernameExist(username) == 1) {
			return true;
		} else {
			return false;
		}
	}

	@Override
	public Administrator loadByUsername(String username) {
		return administratorDao.loadByUsername(username);
	}

	@Override
	public String login(String username, String password) {
		// 在一个客户端尝试登录之前记录一条日志
		getLoggerService().makeLog(Administrator.class.getName(),
				"一个客户端开始尝试登录后台，使用username：" + username
				+ ",password：" + password);
		if(isNull(username)) {
			// 在一个客户端尝试登录失败之后记录一条日志
			getLoggerService().makeLog(Administrator.class.getName(),
					"一个客户端开始尝试登录后台，使用username：" + username
					+ ",password：" + password + "，登录失败，原因是username为空");
			return ResultMessage.admin.LOGIN_FAIL;
		} else {
			if(administratorDao.login(username, password) == 1) {
				// 在一个客户端尝试登录成功之后记录一条日志
				getLoggerService().makeLog(Administrator.class.getName(),
						"一个客户端登录后台，管理员" + username + "登录成功");
				return ResultMessage.admin.LOGIN_SUCCESS;
			} else {
				// 在一个客户端尝试登录失败之后记录一条日志
				getLoggerService().makeLog(Administrator.class.getName(),
						"一个客户端开始尝试登录后台，使用username：" + username
						+ ",password：" + password + "，登录失败");
				return ResultMessage.admin.LOGIN_FAIL;
			}
		}
	}

	@Resource
	public void setAdministratorDao(AdministratorDao administratorDao) {
		this.administratorDao = administratorDao;
	}

	public AdministratorDao getAdministratorDao() {
		return administratorDao;
	}
}
